﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp5
{
    class Program
    {
//        添加3个类，分别实现 IComparer<T>接口，
//        实现对Student类的三个字段的排序。
//1、学生类：学号、姓名、年龄
//2、请选择：1、添加学生信息。2、删除学生信息 2、查询学生信息。
//3、重复的学号不能添加。
//4、查询学生信息功能中有：1、查询所有（按学号排序）
//2、查询所有（按姓名排序），2、查询所有（按年龄排序）
//4、按学号查询（查没有，则打印查无此学生）5、退出

        static void Main(string[] args)
        {
            List<Students> list = new List<Students>();

            Students s1 = new Students(1,"张三",25);
            Students s2 = new Students(2, "李四", 19);
            Students s3 = new Students(3, "王五", 16);

            list.Add(s1);
            list.Add(s2);
            list.Add(s3);

            while (true)
            {
            Console.WriteLine("1、添加学生信息 2、删除学生信息 3、查询学生信息");
            int key1 = int.Parse(Console.ReadLine());

                switch (key1)
                {
                    case 1:
                        Console.WriteLine("请输入新学生的学号");
                        int addNum = int.Parse(Console.ReadLine());
                        bool index1 = true;

                        foreach (Students item in list)
                        {
                            if (addNum == item.Num)
                            {
                                Console.WriteLine("学号重复");
                                index1 = false;
                                break;
                            }
                        }

                        if (index1)
                        {
                            Console.WriteLine("新学生的姓名");
                            string addName = Console.ReadLine();

                            Console.WriteLine("新学生的年龄");
                            int addAge = int.Parse(Console.ReadLine());

                            list.Add(new Students(addNum, addName, addAge));
                            
                            break;
                        }
                        break;
                    case 2:
                        Console.WriteLine("请输入想要删除的学生的学号");
                        int delNum = int.Parse(Console.ReadLine());
                        bool index2 = true;

                        foreach (Students item in list)
                        {
                            if (delNum == item.Num)
                            {
                                list.Remove(item);
                                index2 = false;
                                break;
                            }
                        }

                        if (index2)
                        {
                            Console.WriteLine("查无该学生");
                        }
                        break;
                    case 3:
                        Console.WriteLine("1、查询所有（按学号排序）2、查询所有（按姓名排序），2、查询所有（按年龄排序）4、按学号查询（查没有，则打印查无此学生）5、退出");
                        int key2 = int.Parse(Console.ReadLine());
                        IComparer<Students> comparer;

                        switch (key2)
                        { 
                            case 1:
                                comparer = new SortNum();

                                list.Sort(comparer);

                                foreach (Students item in list)
                                {
                                    Console.WriteLine(item.ToString());
                                }
                                break;
                            case 2:
                                comparer = new SortName();

                                list.Sort(comparer);

                                foreach (Students item in list)
                                {
                                    Console.WriteLine(item.ToString());
                                }
                                break;
                            case 3:
                                comparer = new SortAge();

                                list.Sort(comparer);

                                foreach (Students item in list)
                                {
                                    Console.WriteLine(item.ToString());
                                }
                                break;
                            case 4:
                                Console.WriteLine("请输入想查询的学号");
                                int LookNum = int.Parse(Console.ReadLine());
                                bool index3 = true;

                                foreach (Students item in list)
                                {
                                    if (LookNum == item.Num)
                                    {
                                        Console.WriteLine(item.ToString());
                                        index3 = false;
                                        break;
                                    }
                                }

                                if (index3)
                                {
                                    Console.WriteLine("查无该学生");
                                }
                                break;
                            case 5:
                                Console.WriteLine("退出成功");
                                break;
                            default:
                                break;
                        }
                        break;
                    default:
                        break;
                }
            }
        }
    }
}
